home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
001
/
pibt40s2.arc
/
PIB4010B.MOD
< prev
next >
Wrap
Text File
|
1987-05-25
|
13KB
|
393 lines
(*----------------------------------------------------------------------*)
(* Scroll_Up --- Handle graphics screen scroll *)
(*----------------------------------------------------------------------*)
PROCEDURE ScrollUp;
BEGIN (* ScrollUp *)
IF LeftH THEN
BEGIN
LeftH := FALSE;
Graphics_XPos := 320;
END
ELSE
BEGIN
LeftH := TRUE;
Graphics_XPos := 0;
END;
Graphics_YPos := 5;
END (* ScrollUp *);
(*----------------------------------------------------------------------*)
(* Handle_Escape_Sequence --- Handle escape sequence *)
(*----------------------------------------------------------------------*)
PROCEDURE Handle_Escape_Sequence;
VAR
Ch: CHAR;
(*----------------------------------------------------------------------*)
FUNCTION Async_Next_Character : CHAR;
VAR
C: INTEGER;
BEGIN (* Async_Next_Character *)
Async_Receive_With_Timeout( 5 , C );
IF ( C <> TimeOut ) THEN
Async_Next_Character := CHR( C )
ELSE
Async_Next_Character := CHR(0);
END (* Async_Next_Character *);
(*----------------------------------------------------------------------*)
BEGIN (* Handle_Escape_Sequence *)
CASE Async_Next_Character OF
'/': BEGIN
IF Async_Next_Character IN ['0'..'2'] THEN
IF Async_Next_Character = 'd' THEN;
END;
'8','9',':',';','?','''': ;
'a'..'z': ;
'"': BEGIN
IF Async_Next_Character IN ['0'..'7'] THEN
IF Async_Next_Character IN ['e','g'] THEN;
END;
Ch_FF: BEGIN
Clear_Graphics_Screen;
FlagG := Text_Plot;
END;
Ch_FS: FlagG := Point_Plot_Start;
Ch_GS: FlagG := Vector_Plot_Start;
ELSE;
END (* CASE *);
END (* Handle_Escape_Sequence *);
(*----------------------------------------------------------------------*)
BEGIN (* Display_Graphics *)
(* Remove current cursor *)
Display_Cursor( CursorX, CursorY );
(* Select display depending on *)
(* character. *)
C := ORD( Ch );
IF ( FlagG = Text_Plot ) THEN
CASE C OF
NUL : ; (* Strip Nulls *)
DEL : ; (* Strip Deletes *)
ESC : Handle_Escape_Sequence;
BS : BEGIN
IF LeftH THEN
Graphics_XPos := MAX( Graphics_Xpos - 8 , 0 )
ELSE
Graphics_XPos := MAX( Graphics_Xpos - 8 , 320 );
END;
BELL : IF Not Silent_Mode THEN
WRITE( Ch );
HT : BEGIN
L := 9 - WhereX MOD 8;
FOR I := 1 TO L DO
BEGIN
Plot_Char( BL_Ch, Graphics_XPos, Graphics_YPos );
Graphics_XPos := Graphics_XPos + 8;
END;
END;
FF : Clear_Graphics_Screen;
CR : IF Add_LF THEN
BEGIN
Graphics_YPos := Graphics_YPos + 6;
Last_Column_Hit := FALSE;
IF Graphics_YPos > 198 THEN
ScrollUp
ELSE IF LeftH THEN
Graphics_XPos := 0
ELSE
Graphics_XPos := 320;
END
ELSE
BEGIN
IF LeftH THEN
Graphics_XPos := 0
ELSE
Graphics_XPos := 320;
Last_Column_Hit := FALSE;
END;
LF : IF NOT Add_LF THEN
BEGIN
Graphics_YPos := Graphics_YPos + 6;
IF Graphics_YPos > 198 THEN
ScrollUp;
END;
VT : IF ( Graphics_YPos > 6 ) THEN
Graphics_YPos := Graphics_YPos - 6;
FS : FlagG := Point_Plot_Start;
GS : FlagG := Vector_Plot_Start;
ELSE
IF ( C > 31 ) THEN
BEGIN
Plot_Char( Ch, Graphics_XPos, Graphics_YPos );
Graphics_XPos := Graphics_XPos + 8;
IF ( Graphics_XPos >= 640 ) THEN
BEGIN
Graphics_XPos := 0;
Graphics_YPos := Graphics_YPos + 6;
IF Graphics_YPos > 198 THEN
ScrollUp;
END;
END;
END (* CASE *)
ELSE (* Graphics mode *)
CASE C OF
FF: BEGIN
Clear_Graphics_Screen;
FlagG := Text_Plot;
END;
CR: BEGIN
IF LeftH THEN
Graphics_XPos := 0
ELSE
Graphics_XPos := 320;
Last_Column_Hit := FALSE;
FlagG := Text_Plot;
END;
FS: FlagG := Point_Plot_Start;
GS: FlagG := Vector_Plot_Start;
US: FlagG := Text_Plot;
ESC: Handle_Escape_Sequence;
ELSE
IF C > 31 THEN
Do_Graphics;
END (* CASE *);
(* Display cursor *)
Display_Cursor( Graphics_XPos, Graphics_YPos );
CursorX := Graphics_XPos;
CursorY := Graphics_YPos;
END (* Display_Graphics *);
(*----------------------------------------------------------------------*)
(* Initialize_Graphics_Mode --- Initialize for CGA/EGA differences *)
(*----------------------------------------------------------------------*)
PROCEDURE Initialize_Graphics_Mode;
(*----------------------------------------------------------------------*)
(* *)
(* Procedure: Initialize_Graphics_Mode *)
(* *)
(* Purpose: Set up graphics mode for CGA/EGA differences *)
(* *)
(* Calling Sequence: *)
(* *)
(* Initialize_Graphics_Mode; *)
(* *)
(*----------------------------------------------------------------------*)
BEGIN (* Initialize_Graphics_Mode *)
(* Determine if EGA installed *)
EGA_On := EGA_Present;
(* Set up depending upon EGA or CGA *)
IF EGA_On THEN
BEGIN
XFactor := 0.625;
YFactor := 0.2564103;
YMax := 199;
YInc := 6;
GMode := 6;
{
Plot_Point_Addr := OFS( Plot_Point_EGA );
XOR_Point_Addr := OFS( XOR_Point_EGA );
}
Set_EGA_Text_Mode( 25 );
END
ELSE
BEGIN
XFactor := 0.625;
YFactor := 0.2564103;
YMax := 199;
YInc := 6;
GMode := 6;
{
Plot_Point_Addr := OFS( Plot_Point_CGA );
XOR_Point_Addr := OFS( XOR_Point_CGA );
}
END;
YMaxM1 := YMax - 1;
CASE MultiTasker OF
DoubleDos: Graphics_Screen := DesqView_Screen;
ELSE Graphics_Screen := Actual_Screen;
END (* CASE *);
END (* Initialize_Graphics_Mode *);
(*----------------------------------------------------------------------*)
BEGIN (* Emulate_TEK4010 *)
(* Initialize error handler. *)
ErrorPtr := OFS( Trap_Error );
(* Initialize *)
Graphics_Terminal_Mode := TRUE;
Auto_Wrap_Mode := TRUE;
Done := FALSE;
Do_Status_Line := FALSE;
Do_Status_Time := FALSE;
FlagG := Text_Plot;
New_Line := FALSE;
Insertion_Mode := FALSE;
Save_SUpper := Send_Upper_Case_Only;
Send_Upper_Case_Only := TRUE;
Do_Script_Tests := Waitstring_Mode OR When_Mode OR
WaitCount_Mode OR WaitQuiet_Mode OR
Script_Learn_Mode;
(* Load function keys *)
IF Auto_Load_FunKeys THEN
Load_Function_Keys( 'TEK4010.FNC' );
Graphics_ForeGround_Color := Global_ForeGround_Color;
Graphics_BackGround_Color := Global_BackGround_Color;
(* Set up depending upon EGA/CGA *)
Initialize_Graphics_Mode;
(* Clear graphics screen *)
Clear_Graphics_Screen;
Display_Cursor( CursorX, CursorY );
(* Loop over input until done *)
WHILE ( NOT Done ) DO
BEGIN
(* Check for character typed at keyboard *)
IF KeyPressed THEN
BEGIN
Handle_Keyboard_Input( Done , Reset_Requested ,
ClrScr_Req );
Do_Status_Line := FALSE;
Do_Status_Time := FALSE;
IF Reset_Requested THEN
BEGIN
Clear_Graphics_Screen;
Display_Cursor( CursorX, CursorY );
FlagG := Text_Plot;
END
ELSE IF ClrScr_Req THEN
BEGIN
Clear_Graphics_Screen;
Display_Cursor( CursorX, CursorY );
END;
END;
(* Process any script in progress *)
IF ( Script_File_Mode AND ( NOT ( Done OR Really_Wait_String ) ) ) THEN
BEGIN
Get_Script_Command( PibTerm_Command );
Execute_Command ( PibTerm_Command , Done , TRUE );
END;
(* Handle carrier drop *)
IF Carrier_Dropped THEN
Handle_Carrier_Drop;
(* Hold everything while scroll lock on *)
IF Scroll_Lock_On THEN
Handle_Scroll_Lock;
(* Process character from remote *)
IF ( Async_Buffer_Head <> Async_Buffer_Tail ) THEN
BEGIN
(* Get the character *)
B := Async_Receive( Ch );
(* Strip high bit if requested *)
IF Auto_Strip_High_Bit THEN
Ch := CHR( ORD( Ch ) AND $7F );
(* Perform translation *)
Ch := TrTab[Ch];
(* Display the character received *)
Display_Graphics( Ch );
IF Do_Script_Tests THEN
Do_Script_Checks( Ch );
END
(* Check if waitstring time exhausted *)
ELSE
BEGIN
Async_Line_Status := Async_Line_Status AND $FD;
IF Really_Wait_String THEN
Check_Wait_String_Time;
IF ( ( NOT KeyPressed ) AND ( NOT Script_File_Mode ) ) THEN
IF ( Async_Buffer_Head = Async_Buffer_Tail ) THEN
GiveAwayTime( 1 );
END;
END;
Graphics_Terminal_Mode := FALSE;
Send_Upper_Case_Only := Save_SUpper;
END (* Emulate_TEK4010 *);